好的,經過幾天的基礎建設,想必大家也都躍躍欲試了,我們今天正式進入實作部分。在每次實作,我們都會分為幾個步驟:
在最一開始,我們一定要知道為什麼要寫著個爬蟲,和目標是什麼。因為在研究爬蟲的過程當中,會產生很多資料,很容易令人眼花撩亂,有些資料對我們有用,但更多的資料是在我們這次的範疇當中無用的,若我們花太多心思在枝節上面,反而會讓我們更難找到核心道路。所以在實作的過程當中,只留下必要的路徑和程式碼,其他東西,不知道的、不必要的,一概不放進我們的 code。
當我們有了明確的目標之後,我們需要人工手動走一次最正式的流程,例如我今天要爬取 FB 的個人文章頁面,那我會開啟無痕視窗,包含我輸入某個網址、點了某個按鈕、送了某個 request,這些都必須一步一步走,走的過程當中,同時腦袋會開始思考「這個動作有沒有難度」。
在我們走完整個流程後,我們會針對整個流程下去分解,分成若干個小步驟,亦即說,若我每個步驟都完成了,那麼這個完整的流程就可以確保沒有問題。分解完後,打開 postman 一步一步去模擬每個步驟的 request。在模擬 request 的時候,我們也必須清楚 request 要送出的參數是否都能在我們的掌控之中。
最後,我們會開始實作程式碼,在這個階段,我會建議各位把每個步驟都當成是一個 function 來撰寫,一個一個完成。在完成所有 function 之後,我們再將整個邏輯像是樂高積木一樣組合起來。
那就讓我們來開始牛刀小試吧!
在參賽的過程當中,我都有觀察到訂閱數和瀏覽數,似乎是一種人氣,那我能不能為自己增加點人氣滿足自己小小的虛榮心?如何增加瀏覽數是我這次的目標。
我發現我只要點擊文章,瀏覽數就會增加,看起來好像有點眉目,我猜測可能只是文章網址開啟時候的 counter。
如此一來,我直接 refreh 文章頁面,觀察看看瀏覽數是否有變化,果然如我所預料。
接下來為確保不會受其他因素影響,我打開無痕視窗,再重新 refresh 文章頁面。瀏覽數持續有變化,這個時候嘴角就開始上揚了。
在這探訪的過程,大概已經確定只需要送一個 get request 到該頁面,我就能模擬這個動作,那直接使用 postman 來測測看吧。
確定模擬試成功的,就能進入程式撰寫階段了。
只有一個 request 的 get method 發送,那麼程式碼就非常的單純
var request = require('request');
request('https://ithelp.ithome.com.tw/articles/10190796');
實作之後確認可以增加瀏覽數,那就來跑個迴圈吧!
var request = require('request');
for(var i = 0; i<100; i++){
request('https://ithelp.ithome.com.tw/articles/10190796');
}
既然知道了他只收 get request 就會增加,那麼殺雞其實不用牛刀,我們直接對他做 ab 就好了XD
https://httpd.apache.org/docs/2.4/programs/ab.html
ab -n 100 https://ithelp.ithome.com.tw/articles/10190796
好的,滿足了小小虛榮心,那我們下回再見...
ps. 請工作人員不要砍我的文章QQ
提醒你一件事
iT邦幫忙有防止DDOS的機制
來自同一IP短時間內連續大量的request
是有可能會被ban的
為什麼我知道?
因為我就被ban過
基本上這不是拿來惡意衝高人氣的XDDD
技術本身沒有好壞,端看怎麼用他和理解他
因為了解如何用他,才會知道如何防範
再來提一下 IP ban 的狀況(純技術討論,千萬不要嘗試...)
基本上這是一種攻防
你來衝人氣肯定會使被 ban 的風險
而更進一步簡單的就是 proxy or vpn 換 IP
或者有自身高流量的網站
也能夠透過 jsonp 來讓使用者多發個 request
不過以上都有被發現的線索就是
怎麼防止這種靠程式造訪而非真人在瀏覽的點擊計數,
對這個不是靠點擊數為依據來營利的網站,
只要沒造成運作上的阻礙或過於濫用,
大概不會太過理會,
但對於靠點擊來付費或營收的廠商,
怎麼防這種 Click Fraud 點擊詐欺 就是個有趣的議題了。
這篇 How to Prevent Hackers from Using Bad Bots To Exploit Your Website 是不錯的綜觀這方面議題的開始。
拋磚引玉,感謝大師